From 7451edbf39e237dff0945b725544e8c601ec2eca Mon Sep 17 00:00:00 2001 From: Keir Fraser Date: Tue, 15 Sep 2009 09:25:41 +0100 Subject: [PATCH] x86 mce: Fix panic in mcheck_mca_logout I met the following panic message in mcheck_mca_logout(). MSR_IA32_MCi_ADDR might take the values other than the machine address. FATAL PAGE FAULT occured when the non-existent address is passed to maddr_get_owner(). Signed-off-by: Kazuhiro Suzuki --- xen/arch/x86/cpu/mcheck/mce.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/xen/arch/x86/cpu/mcheck/mce.c b/xen/arch/x86/cpu/mcheck/mce.c index e20898ed52..8866e130bb 100644 --- a/xen/arch/x86/cpu/mcheck/mce.c +++ b/xen/arch/x86/cpu/mcheck/mce.c @@ -237,10 +237,12 @@ mctelem_cookie_t mcheck_mca_logout(enum mca_source who, cpu_banks_t bankmask, if (status & MCi_STATUS_ADDRV) { mca_rdmsrl(MSR_IA32_MC0_ADDR + 4 * i, addr); - d = maddr_get_owner(addr); - if (d != NULL && (who == MCA_POLLER || - who == MCA_CMCI_HANDLER)) - mcb.mc_domid = d->domain_id; + if (mfn_valid(paddr_to_pfn(addr))) { + d = maddr_get_owner(addr); + if (d != NULL && (who == MCA_POLLER || + who == MCA_CMCI_HANDLER)) + mcb.mc_domid = d->domain_id; + } } if (status & MCi_STATUS_MISCV) -- 2.30.2